import Vue from 'vue'
import Vuex from 'vuex'
/**
 * import * as 把所有定义输出包裹在object对象里
 */
import * as MUTYPE from './mutation-types'

Vue.use(Vuex)

export default new Vuex.Store({
  //同步数据
  state: {
    name: '测试',
    count: 0,
    sex: '男'
  },
  //异步数据 --- state的计算属性
  getters: {
    center(state) {
      return state.name + state.count + state.sex
    },
    age(state, getters) {
      return getters.center + ' 年龄单数双数：' + state.count % 2
    }
  },
  //同步方法
  mutations: {
    //payload 负荷
    [MUTYPE.SOME_MUTATION](state, payload) {
      // 变更状态
      state.count += payload.amount
    },
    //常量定义
    // [MUTYPE.SOME_MUTATION](state, n) {
    //   state.count += n;
    // }
  },
  //异步方法
  actions: {
    /**
     *acitons ES5方式
     * proiseAdd({commit:context.commit})
     *下面方式ES6解构形成
     *{
     *state,      // 等同于 `store.state`，若在模块中则为局部状态
      rootState,  // 等同于 `store.state`，只存在于模块中
      commit,     // 等同于 `store.commit`
      dispatch,   // 等同于 `store.dispatch`
      getters,    // 等同于 `store.getters`
      rootGetters // 等同于 `store.getters`，只存在于模块中
     *}
     * */
    promiseAdd({commit}) {
      commit('MUTYPE.SOME_MUTATION')
    }
  },
  modules: {}
})
